package com.v2.k22;

import org.springframework.cglib.proxy.Enhancer;

/**
 * 测试cglib动态代理
 * CGLIB(Code Generation Library)是一个开源项目,是一个强大的，高性能，高质量的Code生成类库，它可以在运行期扩展Java类与实现Java接口，通俗说cglib可以在运行时动态生成字节码。
 * JDK动态代理是基于接口的方式，换句话来说就是代理类和目标类都实现同一个接口，那么代理类和目标类的方法名就一样了；
 * CGLib动态代理是代理类去继承目标类，然后重写其中目标类的方法啊，这样也可以保证代理类拥有目标类的同名方法；
 * https://www.cnblogs.com/wyq1995/p/10945034.html
 */
public class Test {

	public static void main(String[] args) {

		//创建Enhancer对象，类似于JDK动态代理的Proxy类，下一步就是设置几个参数
		Enhancer enhancer = new Enhancer();
		//设置目标类的字节码文件
		enhancer.setSuperclass(Dog.class);
		//设置回调函数
		enhancer.setCallback(new MyMethodInterceptor());

		//这里的creat方法就是正式创建代理类
		Dog proxyDog = (Dog)enhancer.create();
		//调用代理类的eat方法
		proxyDog.run("匡曦");
	}

}
